package com.chen.singletonpattern;

/**
 * 单例设计模式实现方式三
 */
public class Way3 {
    // 使用 volatile 关键字确保多线程环境下的可见性和禁止指令重排序
    private static volatile Way3 instance;

    // 私有构造方法，防止外部实例化
    private Way3() {
    }

    // 提供获取单例对象的方法，使用双重检查锁定（Double-Checked Locking）保证线程安全
    public static Way3 getInstance() {
        // 第一次检查：避免不必要的同步
        if (instance == null) {
            // 同步类对象，确保只有一个线程进入临界区
            synchronized (Way3.class) {
                // 第二次检查：确保只有一个实例被创建
                if (instance == null) {
                    // 创建单例对象
                    instance = new Way3();
                }
            }
        }
        // 返回已创建的或新建的实例
        return instance;
    }
}
